package model;

import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import dal.*;
import util.*;

public class PhaseModel implements IModel {

	public static class FieldNames {
		public static String Id = "Id";
		public static String Name = "Name";
		public static String Code = "Code";
		public static String Description = "Description";
		public static String IdProject = "IdProject";
		public static String Status = "Status";
		public static String PlanStartDate = "PlanStartDate";
		public static String PlanEndDate = "PlanEndDate";
		public static String RealStartDate = "RealStartDate";
		public static String RealEndDate = "RealEndDate";
		public static String Created = "Created";
		public static String Creator = "Creator";
		public static String Updated = "Updated";
		public static String Updator = "Updator";
		public static String Deleted = "Deleted";
		public static String DeletionTime = "DeletionTime";
		public static String Remark = "Remark";
		public static String Index = "Index";

	}

	public class ErrorMessages {
		public String Id = "";
		public String Name = "";
		public String Code = "";
		public String Description = "";
		public String IdProject = "";
		public String Status = "";
		public String PlanStartDate = "";
		public String PlanEndDate = "";
		public String RealStartDate = "";
		public String RealEndDate = "";
		public String Created = "";
		public String Creator = "";
		public String Updated = "";
		public String Updator = "";
		public String Deleted = "";
		public String DeletionTime = "";
		public String Remark = "";
		public String Index = "";

	}

	public ErrorMessages errMsgs = new ErrorMessages();

	public String[] errMsgList = null;

	// private variables
	private int _id = Integer.MIN_VALUE;
	private String _name = null;
	private String _code = null;
	private String _description = null;
	private int _id_project = Integer.MIN_VALUE;
	private int _status = Integer.MIN_VALUE;
	private Date _plan_start_date = null;
	private Date _plan_end_date = null;
	private Date _real_start_date = null;
	private Date _real_end_date = null;
	private Date _created = null;
	private int _creator = Integer.MIN_VALUE;
	private Date _updated = null;
	private int _updator = Integer.MIN_VALUE;
	private boolean _deleted = false;
	private boolean _isdeletedSet = false;
	private Date _deletion_time = null;
	private String _remark = null;
	private int _index = Integer.MIN_VALUE;

	public PhaseModel() {
	}

	// get/set
	public int getId() {
		return _id;
	}

	public void setId(int value) {
		_id = value;
	}

	public String getIdToString() {
		if (_id == Integer.MIN_VALUE || _id == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_id);
		}
	}

	public String getName() {
		return _name;
	}

	public void setName(String value) {
		_name = value;
	}

	public String getNameToString() {
		if (_name != null) {
			return HtmlUtil.genHtml(_name);
		} else {
			return "";
		}
	}

	public String getCode() {
		return _code;
	}

	public void setCode(String value) {
		_code = value;
	}

	public String getCodeToString() {
		if (_code != null) {
			return HtmlUtil.genHtml(_code);
		} else {
			return "";
		}
	}

	public String getDescription() {
		return _description;
	}

	public void setDescription(String value) {
		_description = value;
	}

	public String getDescriptionToString() {
		if (_description != null) {
			return HtmlUtil.genHtml(_description);
		} else {
			return "";
		}
	}

	public int getIdProject() {
		return _id_project;
	}

	public void setIdProject(int value) {
		_id_project = value;
	}

	public String getIdProjectToString() {
		if (_id_project == Integer.MIN_VALUE || _id_project == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_id_project);
		}
	}

	public int getStatus() {
		return _status;
	}

	public void setStatus(int value) {
		_status = value;
	}

	public String getStatusToString() {
		if (_status == Integer.MIN_VALUE || _status == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_status);
		}
	}

	public Date getPlanStartDate() {
		return _plan_start_date;
	}

	public void setPlanStartDate(Date value) {
		_plan_start_date = value;
	}

	public String getPlanStartDateToString() {
		if (_plan_start_date != null) {
			return StringUtil.toDateTimeString(_plan_start_date);
		} else {
			return "";
		}
	}

	public Date getPlanEndDate() {
		return _plan_end_date;
	}

	public void setPlanEndDate(Date value) {
		_plan_end_date = value;
	}

	public String getPlanEndDateToString() {
		if (_plan_end_date != null) {
			return StringUtil.toDateTimeString(_plan_end_date);
		} else {
			return "";
		}
	}

	public Date getRealStartDate() {
		return _real_start_date;
	}

	public void setRealStartDate(Date value) {
		_real_start_date = value;
	}

	public String getRealStartDateToString() {
		if (_real_start_date != null) {
			return StringUtil.toDateTimeString(_real_start_date);
		} else {
			return "";
		}
	}

	public Date getRealEndDate() {
		return _real_end_date;
	}

	public void setRealEndDate(Date value) {
		_real_end_date = value;
	}

	public String getRealEndDateToString() {
		if (_real_end_date != null) {
			return StringUtil.toDateTimeString(_real_end_date);
		} else {
			return "";
		}
	}

	public Date getCreated() {
		return _created;
	}

	public void setCreated(Date value) {
		_created = value;
	}

	public String getCreatedToString() {
		if (_created != null) {
			return StringUtil.toDateTimeString(_created);
		} else {
			return "";
		}
	}

	public int getCreator() {
		return _creator;
	}

	public void setCreator(int value) {
		_creator = value;
	}

	public String getCreatorToString() {
		if (_creator == Integer.MIN_VALUE || _creator == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_creator);
		}
	}

	public Date getUpdated() {
		return _updated;
	}

	public void setUpdated(Date value) {
		_updated = value;
	}

	public String getUpdatedToString() {
		if (_updated != null) {
			return StringUtil.toDateTimeString(_updated);
		} else {
			return "";
		}
	}

	public int getUpdator() {
		return _updator;
	}

	public void setUpdator(int value) {
		_updator = value;
	}

	public String getUpdatorToString() {
		if (_updator == Integer.MIN_VALUE || _updator == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_updator);
		}
	}

	public boolean getDeleted() {
		return _deleted;
	}

	public void setDeleted(boolean value) {
		_deleted = value;
		_isdeletedSet = true;
	}

	public boolean getDeletedSet() {
		return _isdeletedSet;
	}

	public String getDeletedToString() {
		if (_isdeletedSet) {
			return HtmlUtil.genHtml(_deleted);
		} else {
			return "";
		}
	}

	public Date getDeletionTime() {
		return _deletion_time;
	}

	public void setDeletionTime(Date value) {
		_deletion_time = value;
	}

	public String getDeletionTimeToString() {
		if (_deletion_time != null) {
			return StringUtil.toDateTimeString(_deletion_time);
		} else {
			return "";
		}
	}

	public String getRemark() {
		return _remark;
	}

	public void setRemark(String value) {
		_remark = value;
	}

	public String getRemarkToString() {
		if (_remark != null) {
			return HtmlUtil.genHtml(_remark);
		} else {
			return "";
		}
	}

	public int getIndex() {
		return _index;
	}

	public void setIndex(int value) {
		_index = value;
	}

	public String getIndexToString() {
		if (_index == Integer.MIN_VALUE || _index == Integer.MAX_VALUE) {
			return "";
		} else {
			return Integer.toString(_index);
		}
	}

	@Override
	public int[] getPrimaryKey() {
		int[] ids = new int[1];
		ids[0] = getId();
		return ids;
	}

	@Override
	public IModel readFromResultSet(ResultSet rs) throws SQLException {
		PhaseModel model = null;

		model = new PhaseModel();

		// read fields
		{
			int value = rs.getInt("id");
			if (!rs.wasNull()) {
				model.setId(value);
			}
		}
		{
			String value = rs.getString("name");
			if (!rs.wasNull()) {
				model.setName(value);
			}
		}
		{
			String value = rs.getString("code");
			if (!rs.wasNull()) {
				model.setCode(value);
			}
		}
		{
			String value = rs.getString("description");
			if (!rs.wasNull()) {
				model.setDescription(value);
			}
		}
		{
			int value = rs.getInt("id_project");
			if (!rs.wasNull()) {
				model.setIdProject(value);
			}
		}
		{
			int value = rs.getInt("status");
			if (!rs.wasNull()) {
				model.setStatus(value);
			}
		}
		{
			Date value = rs.getTimestamp("plan_start_date");
			if (!rs.wasNull()) {
				model.setPlanStartDate(value);
			}
		}
		{
			Date value = rs.getTimestamp("plan_end_date");
			if (!rs.wasNull()) {
				model.setPlanEndDate(value);
			}
		}
		{
			Date value = rs.getTimestamp("real_start_date");
			if (!rs.wasNull()) {
				model.setRealStartDate(value);
			}
		}
		{
			Date value = rs.getTimestamp("real_end_date");
			if (!rs.wasNull()) {
				model.setRealEndDate(value);
			}
		}
		{
			Date value = rs.getTimestamp("created");
			if (!rs.wasNull()) {
				model.setCreated(value);
			}
		}
		{
			int value = rs.getInt("creator");
			if (!rs.wasNull()) {
				model.setCreator(value);
			}
		}
		{
			Date value = rs.getTimestamp("updated");
			if (!rs.wasNull()) {
				model.setUpdated(value);
			}
		}
		{
			int value = rs.getInt("updator");
			if (!rs.wasNull()) {
				model.setUpdator(value);
			}
		}
		{
			boolean value = rs.getBoolean("deleted");
			if (!rs.wasNull()) {
				model.setDeleted(value);
			}
		}
		{
			Date value = rs.getTimestamp("deletion_time");
			if (!rs.wasNull()) {
				model.setDeletionTime(value);
			}
		}
		{
			String value = rs.getString("remark");
			if (!rs.wasNull()) {
				model.setRemark(value);
			}
		}
		{
			int value = rs.getInt("index");
			if (!rs.wasNull()) {
				model.setIndex(value);
			}
		}

		return model;
	}

	@Override
	public PreparedStatement genSelectStatement(Connection dbConn, IModel query) throws SQLException {
		String sql = "SELECT * FROM sp_phase_select(:id);";
		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModel obj = (PhaseModel) query;

		// set parameters
		st.setObject("id", obj.getId());

		return st.getPreparedStatement();
	}

	@Override
	public PreparedStatement genSelectListStatement(Connection dbConn, IModelExt query) throws SQLException {
		String sql = "SELECT * FROM sp_phase_selectList(:limit, :offset, :id,:name,:code,:description,:id_project,:status,:plan_start_dateFrom,:plan_start_dateTo,:plan_end_dateFrom,:plan_end_dateTo,:real_start_dateFrom,:real_start_dateTo,:real_end_dateFrom,:real_end_dateTo,:createdFrom,:createdTo,:creator,:updatedFrom,:updatedTo,:updator,:deleted,:deletion_timeFrom,:deletion_timeTo,:remark,:index)";

		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModelExt obj = (PhaseModelExt) query;

		if (obj.getLimit() != Integer.MIN_VALUE) {
			st.setObject("limit", obj.getLimit());
		} else {
			st.setObject("limit", Integer.MAX_VALUE);
		}
		if (obj.getOffset() != Integer.MIN_VALUE) {
			st.setObject("offset", obj.getOffset());
		} else {
			st.setObject("offset", 0);
		}

		// set parameters
		if (obj.getId() != Integer.MIN_VALUE) {
			st.setObject("id", obj.getId());
		} else {
			st.setObject("id", null);
		}
		if (obj.getName() != null) {
			st.setObject("name", obj.getName());
		} else {
			st.setObject("name", null);
		}
		if (obj.getCode() != null) {
			st.setObject("code", obj.getCode());
		} else {
			st.setObject("code", null);
		}
		if (obj.getDescription() != null) {
			st.setObject("description", obj.getDescription());
		} else {
			st.setObject("description", null);
		}
		if (obj.getIdProject() != Integer.MIN_VALUE) {
			st.setObject("id_project", obj.getIdProject());
		} else {
			st.setObject("id_project", null);
		}
		if (obj.getStatus() != Integer.MIN_VALUE) {
			st.setObject("status", obj.getStatus());
		} else {
			st.setObject("status", null);
		}
		if (obj.getPlanStartDateFrom() != null) {
			st.setObject("plan_start_dateFrom", obj.getPlanStartDateFrom());
		} else {
			st.setObject("plan_start_dateFrom", null);
		}
		if (obj.getPlanStartDateTo() != null) {
			st.setObject("plan_start_dateTo", obj.getPlanStartDateTo());
		} else {
			st.setObject("plan_start_dateTo", null);
		}
		if (obj.getPlanEndDateFrom() != null) {
			st.setObject("plan_end_dateFrom", obj.getPlanEndDateFrom());
		} else {
			st.setObject("plan_end_dateFrom", null);
		}
		if (obj.getPlanEndDateTo() != null) {
			st.setObject("plan_end_dateTo", obj.getPlanEndDateTo());
		} else {
			st.setObject("plan_end_dateTo", null);
		}
		if (obj.getRealStartDateFrom() != null) {
			st.setObject("real_start_dateFrom", obj.getRealStartDateFrom());
		} else {
			st.setObject("real_start_dateFrom", null);
		}
		if (obj.getRealStartDateTo() != null) {
			st.setObject("real_start_dateTo", obj.getRealStartDateTo());
		} else {
			st.setObject("real_start_dateTo", null);
		}
		if (obj.getRealEndDateFrom() != null) {
			st.setObject("real_end_dateFrom", obj.getRealEndDateFrom());
		} else {
			st.setObject("real_end_dateFrom", null);
		}
		if (obj.getRealEndDateTo() != null) {
			st.setObject("real_end_dateTo", obj.getRealEndDateTo());
		} else {
			st.setObject("real_end_dateTo", null);
		}
		if (obj.getCreatedFrom() != null) {
			st.setObject("createdFrom", obj.getCreatedFrom());
		} else {
			st.setObject("createdFrom", null);
		}
		if (obj.getCreatedTo() != null) {
			st.setObject("createdTo", obj.getCreatedTo());
		} else {
			st.setObject("createdTo", null);
		}
		if (obj.getCreator() != Integer.MIN_VALUE) {
			st.setObject("creator", obj.getCreator());
		} else {
			st.setObject("creator", null);
		}
		if (obj.getUpdatedFrom() != null) {
			st.setObject("updatedFrom", obj.getUpdatedFrom());
		} else {
			st.setObject("updatedFrom", null);
		}
		if (obj.getUpdatedTo() != null) {
			st.setObject("updatedTo", obj.getUpdatedTo());
		} else {
			st.setObject("updatedTo", null);
		}
		if (obj.getUpdator() != Integer.MIN_VALUE) {
			st.setObject("updator", obj.getUpdator());
		} else {
			st.setObject("updator", null);
		}
		if (obj.getDeletedSet()) {
			st.setObject("deleted", obj.getDeleted());
		} else {
			st.setObject("deleted", null);
		}
		if (obj.getDeletionTimeFrom() != null) {
			st.setObject("deletion_timeFrom", obj.getDeletionTimeFrom());
		} else {
			st.setObject("deletion_timeFrom", null);
		}
		if (obj.getDeletionTimeTo() != null) {
			st.setObject("deletion_timeTo", obj.getDeletionTimeTo());
		} else {
			st.setObject("deletion_timeTo", null);
		}
		if (obj.getRemark() != null) {
			st.setObject("remark", obj.getRemark());
		} else {
			st.setObject("remark", null);
		}
		if (obj.getIndex() != Integer.MIN_VALUE) {
			st.setObject("index", obj.getIndex());
		} else {
			st.setObject("index", null);
		}

		return st.getPreparedStatement();
	}

	@Override
	public PreparedStatement genInsertStatement(Connection dbConn, IModel model) throws SQLException {
		String sql = "SELECT sp_phase_insert(:name,:code,:description,:id_project,:status,:plan_start_date,:plan_end_date,:real_start_date,:real_end_date,:creator,:remark,:index)";
		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModel obj = (PhaseModel) model;

		// set parameters here
		if (obj.getName() != null) {
			st.setObject("name", obj.getName());
		} else {
			st.setObject("name", null);
		}
		if (obj.getCode() != null) {
			st.setObject("code", obj.getCode());
		} else {
			st.setObject("code", null);
		}
		if (obj.getDescription() != null) {
			st.setObject("description", obj.getDescription());
		} else {
			st.setObject("description", null);
		}
		if (obj.getIdProject() != Integer.MIN_VALUE) {
			st.setObject("id_project", obj.getIdProject());
		} else {
			st.setObject("id_project", null);
		}
		if (obj.getStatus() != Integer.MIN_VALUE) {
			st.setObject("status", obj.getStatus());
		} else {
			st.setObject("status", null);
		}
		if (obj.getPlanStartDate() != null) {
			st.setObject("plan_start_date", obj.getPlanStartDate());
		} else {
			st.setObject("plan_start_date", null);
		}
		if (obj.getPlanEndDate() != null) {
			st.setObject("plan_end_date", obj.getPlanEndDate());
		} else {
			st.setObject("plan_end_date", null);
		}
		if (obj.getRealStartDate() != null) {
			st.setObject("real_start_date", obj.getRealStartDate());
		} else {
			st.setObject("real_start_date", null);
		}
		if (obj.getRealEndDate() != null) {
			st.setObject("real_end_date", obj.getRealEndDate());
		} else {
			st.setObject("real_end_date", null);
		}
		if (obj.getCreator() != Integer.MIN_VALUE) {
			st.setObject("creator", obj.getCreator());
		} else {
			st.setObject("creator", null);
		}
		if (obj.getRemark() != null) {
			st.setObject("remark", obj.getRemark());
		} else {
			st.setObject("remark", null);
		}
		if (obj.getIndex() != Integer.MIN_VALUE) {
			st.setObject("index", obj.getIndex());
		} else {
			st.setObject("index", null);
		}

		return st.getPreparedStatement();
	}

	@Override
	public PreparedStatement genUpdateStatement(Connection dbConn, IModel model) throws SQLException {
		String sql = "SELECT sp_phase_update(:id,:name,:code,:description,:id_project,:status,:plan_start_date,:plan_end_date,:real_start_date,:real_end_date,:updator,:deleted,:deletion_time,:remark,:index)";

		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModel obj = (PhaseModel) model;

		// set parameters here
		if (obj.getId() != Integer.MIN_VALUE) {
			st.setObject("id", obj.getId());
		} else {
			st.setObject("id", null);
		}
		if (obj.getName() != null) {
			st.setObject("name", obj.getName());
		} else {
			st.setObject("name", null);
		}
		if (obj.getCode() != null) {
			st.setObject("code", obj.getCode());
		} else {
			st.setObject("code", null);
		}
		if (obj.getDescription() != null) {
			st.setObject("description", obj.getDescription());
		} else {
			st.setObject("description", null);
		}
		if (obj.getIdProject() != Integer.MIN_VALUE) {
			st.setObject("id_project", obj.getIdProject());
		} else {
			st.setObject("id_project", null);
		}
		if (obj.getStatus() != Integer.MIN_VALUE) {
			st.setObject("status", obj.getStatus());
		} else {
			st.setObject("status", null);
		}
		if (obj.getPlanStartDate() != null) {
			st.setObject("plan_start_date", obj.getPlanStartDate());
		} else {
			st.setObject("plan_start_date", null);
		}
		if (obj.getPlanEndDate() != null) {
			st.setObject("plan_end_date", obj.getPlanEndDate());
		} else {
			st.setObject("plan_end_date", null);
		}
		if (obj.getRealStartDate() != null) {
			st.setObject("real_start_date", obj.getRealStartDate());
		} else {
			st.setObject("real_start_date", null);
		}
		if (obj.getRealEndDate() != null) {
			st.setObject("real_end_date", obj.getRealEndDate());
		} else {
			st.setObject("real_end_date", null);
		}
		if (obj.getUpdator() != Integer.MIN_VALUE) {
			st.setObject("updator", obj.getUpdator());
		} else {
			st.setObject("updator", null);
		}
		if (obj.getDeletedSet()) {
			st.setObject("deleted", obj.getDeleted());
		} else {
			st.setObject("deleted", null);
		}
		if (obj.getDeletionTime() != null) {
			st.setObject("deletion_time", obj.getDeletionTime());
		} else {
			st.setObject("deletion_time", null);
		}
		if (obj.getRemark() != null) {
			st.setObject("remark", obj.getRemark());
		} else {
			st.setObject("remark", null);
		}
		if (obj.getIndex() != Integer.MIN_VALUE) {
			st.setObject("index", obj.getIndex());
		} else {
			st.setObject("index", null);
		}

		return st.getPreparedStatement();
	}

	@Override
	public PreparedStatement genDeleteStatement(Connection dbConn, IModel query) throws SQLException {
		String sql = "select sp_phase_delete(:id);";
		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModel obj = (PhaseModel) query;

		// set primary keys
		st.setObject("id", obj.getId());

		return st.getPreparedStatement();
	}

	@Override
	public PreparedStatement genCountStatement(Connection dbConn, IModelExt input) throws SQLException {
		String sql = "SELECT sp_phase_count(:id,:name,:code,:description,:id_project,:status,:plan_start_dateFrom,:plan_start_dateTo,:plan_end_dateFrom,:plan_end_dateTo,:real_start_dateFrom,:real_start_dateTo,:real_end_dateFrom,:real_end_dateTo,:createdFrom,:createdTo,:creator,:updatedFrom,:updatedTo,:updator,:deleted,:deletion_timeFrom,:deletion_timeTo,:remark,:index)";

		NamedParameterPreparedStatement st = new NamedParameterPreparedStatement(dbConn, sql);

		PhaseModelExt obj = (PhaseModelExt) input;

		// set parameters here
		if (obj.getId() != Integer.MIN_VALUE) {
			st.setObject("id", obj.getId());
		} else {
			st.setObject("id", null);
		}
		if (obj.getName() != null) {
			st.setObject("name", obj.getName());
		} else {
			st.setObject("name", null);
		}
		if (obj.getCode() != null) {
			st.setObject("code", obj.getCode());
		} else {
			st.setObject("code", null);
		}
		if (obj.getDescription() != null) {
			st.setObject("description", obj.getDescription());
		} else {
			st.setObject("description", null);
		}
		if (obj.getIdProject() != Integer.MIN_VALUE) {
			st.setObject("id_project", obj.getIdProject());
		} else {
			st.setObject("id_project", null);
		}
		if (obj.getStatus() != Integer.MIN_VALUE) {
			st.setObject("status", obj.getStatus());
		} else {
			st.setObject("status", null);
		}
		if (obj.getPlanStartDateFrom() != null) {
			st.setObject("plan_start_dateFrom", obj.getPlanStartDateFrom());
		} else {
			st.setObject("plan_start_dateFrom", null);
		}
		if (obj.getPlanStartDateTo() != null) {
			st.setObject("plan_start_dateTo", obj.getPlanStartDateTo());
		} else {
			st.setObject("plan_start_dateTo", null);
		}
		if (obj.getPlanEndDateFrom() != null) {
			st.setObject("plan_end_dateFrom", obj.getPlanEndDateFrom());
		} else {
			st.setObject("plan_end_dateFrom", null);
		}
		if (obj.getPlanEndDateTo() != null) {
			st.setObject("plan_end_dateTo", obj.getPlanEndDateTo());
		} else {
			st.setObject("plan_end_dateTo", null);
		}
		if (obj.getRealStartDateFrom() != null) {
			st.setObject("real_start_dateFrom", obj.getRealStartDateFrom());
		} else {
			st.setObject("real_start_dateFrom", null);
		}
		if (obj.getRealStartDateTo() != null) {
			st.setObject("real_start_dateTo", obj.getRealStartDateTo());
		} else {
			st.setObject("real_start_dateTo", null);
		}
		if (obj.getRealEndDateFrom() != null) {
			st.setObject("real_end_dateFrom", obj.getRealEndDateFrom());
		} else {
			st.setObject("real_end_dateFrom", null);
		}
		if (obj.getRealEndDateTo() != null) {
			st.setObject("real_end_dateTo", obj.getRealEndDateTo());
		} else {
			st.setObject("real_end_dateTo", null);
		}
		if (obj.getCreatedFrom() != null) {
			st.setObject("createdFrom", obj.getCreatedFrom());
		} else {
			st.setObject("createdFrom", null);
		}
		if (obj.getCreatedTo() != null) {
			st.setObject("createdTo", obj.getCreatedTo());
		} else {
			st.setObject("createdTo", null);
		}
		if (obj.getCreator() != Integer.MIN_VALUE) {
			st.setObject("creator", obj.getCreator());
		} else {
			st.setObject("creator", null);
		}
		if (obj.getUpdatedFrom() != null) {
			st.setObject("updatedFrom", obj.getUpdatedFrom());
		} else {
			st.setObject("updatedFrom", null);
		}
		if (obj.getUpdatedTo() != null) {
			st.setObject("updatedTo", obj.getUpdatedTo());
		} else {
			st.setObject("updatedTo", null);
		}
		if (obj.getUpdator() != Integer.MIN_VALUE) {
			st.setObject("updator", obj.getUpdator());
		} else {
			st.setObject("updator", null);
		}
		if (obj.getDeletedSet()) {
			st.setObject("deleted", obj.getDeleted());
		} else {
			st.setObject("deleted", null);
		}
		if (obj.getDeletionTimeFrom() != null) {
			st.setObject("deletion_timeFrom", obj.getDeletionTimeFrom());
		} else {
			st.setObject("deletion_timeFrom", null);
		}
		if (obj.getDeletionTimeTo() != null) {
			st.setObject("deletion_timeTo", obj.getDeletionTimeTo());
		} else {
			st.setObject("deletion_timeTo", null);
		}
		if (obj.getRemark() != null) {
			st.setObject("remark", obj.getRemark());
		} else {
			st.setObject("remark", null);
		}
		if (obj.getIndex() != Integer.MIN_VALUE) {
			st.setObject("index", obj.getIndex());
		} else {
			st.setObject("index", null);
		}

		return st.getPreparedStatement();
	}

	/*
	 * private String fillHtmlTemplate(String template) { String html = template
	 * .replace(":id", Integer.toString(_id)) .replace(":name",
	 * HtmlUtil.genHtml(_name)) .replace(":code", HtmlUtil.genHtml(_code))
	 * .replace(":description", HtmlUtil.genHtml(_description))
	 * .replace(":id_project", Integer.toString(_id_project))
	 * .replace(":status", Integer.toString(_status))
	 * .replace(":plan_start_date",
	 * StringUtil.toDateTimeString(_plan_start_date)) .replace(":plan_end_date",
	 * StringUtil.toDateTimeString(_plan_end_date)) .replace(":real_start_date",
	 * StringUtil.toDateTimeString(_real_start_date)) .replace(":real_end_date",
	 * StringUtil.toDateTimeString(_real_end_date)) .replace(":created",
	 * StringUtil.toDateTimeString(_created)) .replace(":creator",
	 * Integer.toString(_creator)) .replace(":updated",
	 * StringUtil.toDateTimeString(_updated)) .replace(":updator",
	 * Integer.toString(_updator)) .replace(":deleted",
	 * HtmlUtil.genHtml(_isdeletedSet, _deleted)) .replace(":deletion_time",
	 * StringUtil.toDateTimeString(_deletion_time)) .replace(":remark",
	 * HtmlUtil.genHtml(_remark)) .replace(":index", Integer.toString(_index))
	 * 
	 * ; return html; }
	 */

	/*
	 * private String fillHtmlTemplate(String template) { String html = template
	 * .replace(":Id", Integer.toString(_Id)) .replace(":Name",
	 * HtmlUtil.genHtml(_Name)) .replace(":Code", HtmlUtil.genHtml(_Code))
	 * .replace(":Description", HtmlUtil.genHtml(_Description))
	 * .replace(":IdProject", Integer.toString(_IdProject)) .replace(":Status",
	 * Integer.toString(_Status)) .replace(":PlanStartDate",
	 * StringUtil.toDateTimeString(_PlanStartDate)) .replace(":PlanEndDate",
	 * StringUtil.toDateTimeString(_PlanEndDate)) .replace(":RealStartDate",
	 * StringUtil.toDateTimeString(_RealStartDate)) .replace(":RealEndDate",
	 * StringUtil.toDateTimeString(_RealEndDate)) .replace(":Created",
	 * StringUtil.toDateTimeString(_Created)) .replace(":Creator",
	 * Integer.toString(_Creator)) .replace(":Updated",
	 * StringUtil.toDateTimeString(_Updated)) .replace(":Updator",
	 * Integer.toString(_Updator)) .replace(":Deleted",
	 * HtmlUtil.genHtml(_isDeletedSet, _Deleted)) .replace(":DeletionTime",
	 * StringUtil.toDateTimeString(_DeletionTime)) .replace(":Remark",
	 * HtmlUtil.genHtml(_Remark)) .replace(":Index", Integer.toString(_Index))
	 * 
	 * ; return html; }
	 */

	// ADDED CODE

	private List<ChecklistItemModel> _checklistItems = new ArrayList<ChecklistItemModel>();

	public List<ChecklistItemModel> getChecklistItems() {
		return _checklistItems;
	}

	public void setChecklistItems(List<ChecklistItemModel> _checklistItems) {
		this._checklistItems = _checklistItems;
	}

	public Date getFirstDay() {
		if (_firstDay == null) {
			for (ChecklistItemModel item : _checklistItems) {
				if (_firstDay == null) {
					_firstDay = item.getStartTime();
				} else {
					Date fistDay = item.getStartTime();
					if (fistDay != null && _firstDay.after(fistDay)) {
						_firstDay = fistDay;
					}
				}
			}
		}

		return _firstDay;
	}

	public Date getLastDay() {
		if (_lastDay == null) {
			for (ChecklistItemModel item : _checklistItems) {
				if (_lastDay == null) {
					_lastDay = item.getEndTime();
				} else {
					Date lastDay = item.getEndTime();
					if (lastDay != null && _firstDay.before(lastDay)) {
						_lastDay = lastDay;
					}
				}
			}
		}

		return _lastDay;
	}

	private Date _firstDay = null;

	private Date _lastDay = null;
	
	private int _documentCount = 0;
	
	public int getDocumentCount() {
		return _documentCount;
	}
	

	public void setDocumentCount(int documentCount) {
		this._documentCount = documentCount;
	}
	
	private List<DocumentModel> _documents;
	
	public List<DocumentModel> getDocuments() {
		return _documents;
	}

	public void setDocuments(List<DocumentModel> _documents) {
		this._documents = _documents;
	}

}